上一篇我們實做了zero-shot react description,本篇我們繼續實作其他AgentType!
我們就先來實作上篇有介紹過的Self-Ask with Search,也就是能夠使用搜尋tool去得到外部資料再進行推理的Agent
首先在搜尋工具的選擇上,我選擇SerpApi,這邊先來介紹一下這是什麼
SerpApi就是一個提供了Google以及其他搜尋引擎的搜尋API,並且支援多種形式,像是Google Maps、 Google Image、Youtube等等,再以JSON檔回傳搜尋結果。
我們就能使用這個搜尋API,和LangChain、Agent結合,創造出一個自帶搜尋功能的Agent!
首先我們要先去SerpApi官網註冊一個帳號,並申請到自己的Api Key
free plan都會有一百次搜尋可以使用~
然後將Key複製下來,我們在專案中打上
import os
os.environ["SERPAPI_API_KEY"] = "SERPAPIKEY" # 在這邊將你的key複製上來
這樣就將Api Key設置好了!
接著我們一樣先將tool寫出來,這邊有兩種寫法,第一種就是和前一篇一樣,將我們的tool自行創建出來,在func這邊寫上搜尋函數並寫上description
from langchain.agents import initialize_agent, Tool
from langchain.agents import AgentType
from langchain_community.chat_models.ollama import ChatOllama
from langchain.utilities import SerpAPIWrapper
# 創建SerpApi工具
search_tool = Tool(
name="Search",
func=SerpAPIWrapper().run,
description="Search for information on the web when you need more context or details."
)
另一種寫法就是用Langchain裡的load_tools這個class,裡面就是有事先集成了很多工具,像是AzureAIService、File Management、GitHub等等,我們要用的SerpApi也在其中,所以我們這邊就可以直接用load tools直接將他載入進來
from langchain.agents import load_tools
search_tool = load_tools(["serpapi"])
這樣就可以直接讓Agent去用了~
他的name、description都已經配置好了不用擔心!都已經配置好了不用擔心!
那接下來我們就將Agent創建出來~
# 初始化AgentExecutor
agent_executor = initialize_agent(
tools=[search_tool],
llm=llm,
agent=AgentType.SELF_ASK_WITH_SEARCH,
verbose=True
)
# 測試 Agent with 兩個問題
question = "What day is today? Also, what happened on this day in history?"
response = agent_executor.run(question)
print(response)
print出來的結果都正確沒問題的話,
這樣我們就成功作到SELF_ASK_WITH_SEARCH 並且讓Agent with搜尋工具了!
並且verbose有 = true,這邊也可以看到模型詳細搜尋解題的細節!